home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM Fácil 84 / CDROM Facil N84.iso / essenc / dotnet / prog02.exe / FL_InstallPersistSqlState_sql________.3643236F_FC70_11D3_A536_0090278A1BB8 < prev    next >
Encoding:
Text File  |  2003-05-15  |  32.7 KB  |  1,095 lines

  1. /* First uninstall - this section is exactly the same as uninstall.sql */
  2. USE master
  3. GO
  4.  
  5. /* Drop the database containing our sprocs */
  6. IF DB_ID('ASPState') IS NOT NULL BEGIN
  7.     DROP DATABASE ASPState
  8. END
  9. GO
  10.  
  11. /* Drop the obsolete startup enabler */
  12. DECLARE @PROCID int
  13. SET @PROCID = OBJECT_ID('EnableASPStateStartup') 
  14. IF @PROCID IS NOT NULL AND OBJECTPROPERTY(@PROCID, 'IsProcedure') = 1 BEGIN
  15.     DROP PROCEDURE EnableASPStateStartup
  16. END
  17. GO
  18.  
  19. /* Drop the obsolete startup disabler */
  20. DECLARE @PROCID int
  21. SET @PROCID = OBJECT_ID('DisableASPStateStartup') 
  22. IF @PROCID IS NOT NULL AND OBJECTPROPERTY(@PROCID, 'IsProcedure') = 1 BEGIN
  23.     DROP PROCEDURE DisableASPStateStartup
  24. END
  25. GO
  26.  
  27. /* Drop the ASPState_DeleteExpiredSessions_Job */
  28. DECLARE @JobID BINARY(16)  
  29. SELECT @JobID = job_id     
  30. FROM   msdb.dbo.sysjobs    
  31. WHERE (name = N'ASPState_Job_DeleteExpiredSessions')       
  32. IF (@JobID IS NOT NULL)    
  33. BEGIN  
  34.     -- Check if the job is a multi-server job  
  35.     IF (EXISTS (SELECT  * 
  36.               FROM    msdb.dbo.sysjobservers 
  37.               WHERE   (job_id = @JobID) AND (server_id <> 0))) 
  38.     BEGIN 
  39.         -- There is, so abort the script 
  40.         RAISERROR (N'Unable to import job ''ASPState_Job_DeleteExpiredSessions'' since there is already a multi-server job with this name.', 16, 1) 
  41.     END 
  42.     ELSE 
  43.         -- Delete the [local] job 
  44.         EXECUTE msdb.dbo.sp_delete_job @job_name = N'ASPState_Job_DeleteExpiredSessions' 
  45. END
  46.  
  47. /* Create and populate the ASPState database */
  48. CREATE DATABASE ASPState
  49. GO
  50.  
  51. USE ASPState
  52. GO
  53.  
  54. /* Check to make sure the USE worked.  The CREATE DATABASE may have failed. */
  55. IF DB_NAME()<>'ASPState' BEGIN
  56.     RAISERROR('Error creating state database',20,1)  -- Sev 20 will terminate the connection
  57. END    
  58.  
  59. SET QUOTED_IDENTIFIER OFF 
  60. GO
  61. SET ANSI_NULLS ON 
  62. GO
  63.  
  64. CREATE PROCEDURE DropTempTables
  65. AS
  66.     IF OBJECT_ID('ASPState..ASPStateTempSessions','U') IS NOT NULL BEGIN
  67.         DROP TABLE ASPState..ASPStateTempSessions
  68.     END
  69.  
  70.     IF OBJECT_ID('ASPState..ASPStateTempApplications','U') IS NOT NULL BEGIN
  71.         DROP TABLE ASPState..ASPStateTempApplications
  72.     END
  73.  
  74.     RETURN 0
  75. GO
  76.  
  77. CREATE PROCEDURE GetMajorVersion
  78.     @@ver int output
  79. AS
  80. /* Find out the version */
  81.  
  82. IF OBJECT_ID('tempdb..#AspstateVer') IS NOT NULL BEGIN
  83.     DROP TABLE #AspstateVer
  84. END
  85.  
  86. CREATE TABLE #AspstateVer
  87. (
  88.     c1 INT,
  89.     c2 CHAR(100),
  90.     c3 CHAR(100),
  91.     version CHAR(100)
  92. )
  93.  
  94. INSERT INTO    #AspstateVer
  95. EXEC master..xp_msver ProductVersion
  96.  
  97. DECLARE @version CHAR(100)
  98. DECLARE @dot INT
  99.  
  100. SELECT @version = version FROM #AspstateVer
  101. SELECT @dot = CHARINDEX('.', @version)
  102. SELECT @@ver = CONVERT(INT, SUBSTRING(@version, 1, @dot-1))
  103. GO   
  104.  
  105. /* Find out the version */
  106. DECLARE @ver INT
  107. EXEC GetMajorVersion @@ver=@ver OUTPUT
  108.  
  109. DECLARE @cmd CHAR(8000)
  110.  
  111. IF (@ver >= 8)
  112.     SET @cmd = '
  113.         CREATE PROCEDURE CreateTempTables
  114.         AS
  115.             CREATE TABLE ASPState..ASPStateTempSessions (
  116.                 SessionId           CHAR(32)        NOT NULL PRIMARY KEY,
  117.                 Created             DATETIME        NOT NULL DEFAULT GETUTCDATE(),
  118.                 Expires             DATETIME        NOT NULL,
  119.                 LockDate            DATETIME        NOT NULL,
  120.                 LockDateLocal       DATETIME        NOT NULL,
  121.                 LockCookie          INT             NOT NULL,
  122.                 Timeout             INT             NOT NULL,
  123.                 Locked              BIT             NOT NULL,
  124.                 SessionItemShort    VARBINARY(7000) NULL,
  125.                 SessionItemLong     IMAGE           NULL,
  126.             ) 
  127.  
  128.             CREATE TABLE ASPState..ASPStateTempApplications (
  129.                 AppId               INT             NOT NULL PRIMARY KEY,
  130.                 AppName             CHAR(280)       NOT NULL,
  131.             ) 
  132.  
  133.             CREATE NONCLUSTERED INDEX Index_AppName ON ASPState..ASPStateTempApplications(AppName)
  134.  
  135.             RETURN 0'
  136. ELSE
  137.     SET @cmd = '
  138.         CREATE PROCEDURE CreateTempTables
  139.         AS
  140.             CREATE TABLE ASPState..ASPStateTempSessions (
  141.                 SessionId           CHAR(32)        NOT NULL PRIMARY KEY,
  142.                 Created             DATETIME        NOT NULL DEFAULT GETDATE(),
  143.                 Expires             DATETIME        NOT NULL,
  144.                 LockDate            DATETIME        NOT NULL,
  145.                 LockCookie          INT             NOT NULL,
  146.                 Timeout             INT             NOT NULL,
  147.                 Locked              BIT             NOT NULL,
  148.                 SessionItemShort    VARBINARY(7000) NULL,
  149.                 SessionItemLong     IMAGE           NULL,
  150.             ) 
  151.  
  152.             CREATE TABLE ASPState..ASPStateTempApplications (
  153.                 AppId               INT             NOT NULL PRIMARY KEY,
  154.                 AppName             CHAR(280)       NOT NULL,
  155.             ) 
  156.  
  157.             CREATE NONCLUSTERED INDEX Index_AppName ON ASPState..ASPStateTempApplications(AppName)
  158.  
  159.             RETURN 0'
  160.  
  161. EXEC (@cmd)
  162. GO   
  163.  
  164. CREATE PROCEDURE ResetData
  165. AS
  166.     EXECUTE DropTempTables
  167.     EXECUTE CreateTempTables
  168.     RETURN 0
  169. GO
  170.    
  171. EXECUTE sp_addtype tSessionId, 'CHAR(32)',  'NOT NULL'
  172. GO
  173.  
  174. EXECUTE sp_addtype tAppName, 'VARCHAR(280)', 'NOT NULL'
  175. GO
  176.  
  177. EXECUTE sp_addtype tSessionItemShort, 'VARBINARY(7000)'
  178. GO
  179.  
  180. EXECUTE sp_addtype tSessionItemLong, 'IMAGE'
  181. GO
  182.  
  183. EXECUTE sp_addtype tTextPtr, 'VARBINARY(16)'
  184. GO
  185.  
  186. CREATE PROCEDURE GetHashCode
  187.     @input tAppName,
  188.     @hash INT OUTPUT
  189. AS
  190.     /* 
  191.        This sproc is based on this C# hash function:
  192.  
  193.         int GetHashCode(string s)
  194.         {
  195.             int     hash = 5381;
  196.             int     len = s.Length;
  197.  
  198.             for (int i = 0; i < len; i++) {
  199.                 int     c = Convert.ToInt32(s[i]);
  200.                 hash = ((hash << 5) + hash) ^ c;
  201.             }
  202.  
  203.             return hash;
  204.         }
  205.  
  206.         However, SQL 7 doesn't provide a 32-bit integer
  207.         type that allows rollover of bits, we have to
  208.         divide our 32bit integer into the upper and lower
  209.         16 bits to do our calculation.
  210.     */
  211.        
  212.     DECLARE @hi_16bit   INT
  213.     DECLARE @lo_16bit   INT
  214.     DECLARE @hi_t       INT
  215.     DECLARE @lo_t       INT
  216.     DECLARE @len        INT
  217.     DECLARE @i          INT
  218.     DECLARE @c          INT
  219.     DECLARE @carry      INT
  220.  
  221.     SET @hi_16bit = 0
  222.     SET @lo_16bit = 5381
  223.     
  224.     SET @len = DATALENGTH(@input)
  225.     SET @i = 1
  226.     
  227.     WHILE (@i <= @len)
  228.     BEGIN
  229.         SET @c = ASCII(SUBSTRING(@input, @i, 1))
  230.  
  231.         /* Formula:                        
  232.            hash = ((hash << 5) + hash) ^ c */
  233.  
  234.         /* hash << 5 */
  235.         SET @hi_t = @hi_16bit * 32 /* high 16bits << 5 */
  236.         SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
  237.         
  238.         SET @lo_t = @lo_16bit * 32 /* low 16bits << 5 */
  239.         
  240.         SET @carry = @lo_16bit & 0x1F0000 /* move low 16bits carryover to hi 16bits */
  241.         SET @carry = @carry / 0x10000 /* >> 16 */
  242.         SET @hi_t = @hi_t + @carry
  243.         SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
  244.  
  245.         /* + hash */
  246.         SET @lo_16bit = @lo_16bit + @lo_t
  247.         SET @hi_16bit = @hi_16bit + @hi_t + (@lo_16bit / 0x10000)
  248.         /* delay clearing the overflow */
  249.  
  250.         /* ^c */
  251.         SET @lo_16bit = @lo_16bit ^ @c
  252.  
  253.         /* Now clear the overflow bits */    
  254.         SET @hi_16bit = @hi_16bit & 0xFFFF
  255.         SET @lo_16bit = @lo_16bit & 0xFFFF
  256.  
  257.         SET @i = @i + 1
  258.     END
  259.  
  260.     /* Do a sign extension of the hi-16bit if needed */
  261.     IF (@hi_16bit & 0x8000 <> 0)
  262.         SET @hi_16bit = 0xFFFF0000 | @hi_16bit
  263.  
  264.     /* Merge hi and lo 16bit back together */
  265.     SET @hi_16bit = @hi_16bit * 0x10000 /* << 16 */
  266.     SET @hash = @hi_16bit | @lo_16bit
  267.  
  268.     RETURN 0
  269. GO
  270.  
  271. CREATE PROCEDURE TempGetAppID
  272.     @appName    tAppName,
  273.     @appId      INT OUTPUT
  274. AS
  275.     SET @appName = LOWER(@appName)
  276.     SET @appId = NULL
  277.     
  278.     SELECT @appId = AppId
  279.     FROM ASPState..ASPStateTempApplications
  280.     WHERE AppName = @appName
  281.     
  282.     IF @appId IS NULL BEGIN
  283.         BEGIN TRAN        
  284.  
  285.         SELECT @appId = AppId
  286.         FROM ASPState..ASPStateTempApplications WITH (TABLOCKX)
  287.         WHERE AppName = @appName
  288.         
  289.         IF @appId IS NULL
  290.         BEGIN
  291.             EXEC GetHashCode @appName, @appId OUTPUT
  292.             
  293.             INSERT ASPState..ASPStateTempApplications
  294.             VALUES
  295.             (@appId, @appName)
  296.             
  297.             IF @@ERROR = 2627 
  298.             BEGIN
  299.                 DECLARE @dupApp tAppName
  300.             
  301.                 SELECT @dupApp = RTRIM(AppName)
  302.                 FROM ASPState..ASPStateTempApplications 
  303.                 WHERE AppId = @appId
  304.                 
  305.                 RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.', 
  306.                             18, 1, @appName, @dupApp)
  307.             END
  308.         END
  309.  
  310.         COMMIT
  311.     END
  312.  
  313.     RETURN 0
  314. GO
  315.  
  316. /* Find out the version */
  317. DECLARE @ver INT
  318. EXEC GetMajorVersion @@ver=@ver OUTPUT
  319. DECLARE @cmd CHAR(8000)
  320. IF (@ver >= 8)
  321.     SET @cmd = '
  322.         CREATE PROCEDURE TempGetStateItem
  323.             @id         tSessionId,
  324.             @itemShort  tSessionItemShort OUTPUT,
  325.             @locked     BIT OUTPUT,
  326.             @lockDate   DATETIME OUTPUT,
  327.             @lockCookie INT OUTPUT
  328.         AS
  329.             DECLARE @textptr AS tTextPtr
  330.             DECLARE @length AS INT
  331.             DECLARE @now as DATETIME
  332.             SET @now = GETUTCDATE()
  333.  
  334.             UPDATE ASPState..ASPStateTempSessions
  335.             SET Expires = DATEADD(n, Timeout, @now), 
  336.                 @locked = Locked,
  337.                 @lockDate = LockDateLocal,
  338.                 @lockCookie = LockCookie,
  339.                 @itemShort = CASE @locked
  340.                     WHEN 0 THEN SessionItemShort
  341.                     ELSE NULL
  342.                     END,
  343.                 @textptr = CASE @locked
  344.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  345.                     ELSE NULL
  346.                     END,
  347.                 @length = CASE @locked
  348.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  349.                     ELSE NULL
  350.                     END
  351.             WHERE SessionId = @id
  352.             IF @length IS NOT NULL BEGIN
  353.                 READTEXT ASPState..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  354.             END
  355.  
  356.             RETURN 0'
  357. ELSE
  358.     SET @cmd = '
  359.         CREATE PROCEDURE TempGetStateItem
  360.             @id         tSessionId,
  361.             @itemShort  tSessionItemShort OUTPUT,
  362.             @locked     BIT OUTPUT,
  363.             @lockDate   DATETIME OUTPUT,
  364.             @lockCookie INT OUTPUT
  365.         AS
  366.             DECLARE @textptr AS tTextPtr
  367.             DECLARE @length AS INT
  368.             DECLARE @now as DATETIME
  369.             SET @now = GETDATE()
  370.  
  371.             UPDATE ASPState..ASPStateTempSessions
  372.             SET Expires = DATEADD(n, Timeout, @now), 
  373.                 @locked = Locked,
  374.                 @lockDate = LockDate,
  375.                 @lockCookie = LockCookie,
  376.                 @itemShort = CASE @locked
  377.                     WHEN 0 THEN SessionItemShort
  378.                     ELSE NULL
  379.                     END,
  380.                 @textptr = CASE @locked
  381.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  382.                     ELSE NULL
  383.                     END,
  384.                 @length = CASE @locked
  385.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  386.                     ELSE NULL
  387.                     END
  388.             WHERE SessionId = @id
  389.             IF @length IS NOT NULL BEGIN
  390.                 READTEXT ASPState..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  391.             END
  392.  
  393.             RETURN 0'
  394.     
  395. EXEC (@cmd)    
  396. GO
  397.  
  398. DECLARE @ver INT
  399. EXEC GetMajorVersion @@ver=@ver OUTPUT
  400. DECLARE @cmd CHAR(8000)
  401. IF (@ver >= 8)
  402.     SET @cmd = '
  403.         CREATE PROCEDURE TempGetStateItem2
  404.             @id         tSessionId,
  405.             @itemShort  tSessionItemShort OUTPUT,
  406.             @locked     BIT OUTPUT,
  407.             @lockAge    INT OUTPUT,
  408.             @lockCookie INT OUTPUT
  409.         AS
  410.             DECLARE @textptr AS tTextPtr
  411.             DECLARE @length AS INT
  412.             DECLARE @now as DATETIME
  413.             SET @now = GETUTCDATE()
  414.  
  415.             UPDATE ASPState..ASPStateTempSessions
  416.             SET Expires = DATEADD(n, Timeout, @now), 
  417.                 @locked = Locked,
  418.                 @lockAge = DATEDIFF(second, LockDate, @now),
  419.                 @lockCookie = LockCookie,
  420.                 @itemShort = CASE @locked
  421.                     WHEN 0 THEN SessionItemShort
  422.                     ELSE NULL
  423.                     END,
  424.                 @textptr = CASE @locked
  425.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  426.                     ELSE NULL
  427.                     END,
  428.                 @length = CASE @locked
  429.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  430.                     ELSE NULL
  431.                     END
  432.             WHERE SessionId = @id
  433.             IF @length IS NOT NULL BEGIN
  434.                 READTEXT ASPState..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  435.             END
  436.  
  437.             RETURN 0'
  438.  
  439. EXEC (@cmd)    
  440. GO
  441.             
  442.  
  443. DECLARE @ver INT
  444. EXEC GetMajorVersion @@ver=@ver OUTPUT
  445. DECLARE @cmd CHAR(8000)
  446. IF (@ver >= 8)
  447.     SET @cmd = '
  448.         CREATE PROCEDURE TempGetStateItemExclusive
  449.             @id         tSessionId,
  450.             @itemShort  tSessionItemShort OUTPUT,
  451.             @locked     BIT OUTPUT,
  452.             @lockDate   DATETIME OUTPUT,
  453.             @lockCookie INT OUTPUT
  454.         AS
  455.             DECLARE @textptr AS tTextPtr
  456.             DECLARE @length AS INT
  457.             DECLARE @now as DATETIME
  458.             DECLARE @nowLocal as DATETIME
  459.  
  460.             SET @now = GETUTCDATE()
  461.             SET @nowLocal = GETDATE()
  462.             
  463.             UPDATE ASPState..ASPStateTempSessions
  464.             SET Expires = DATEADD(n, Timeout, @now), 
  465.                 LockDate = CASE Locked
  466.                     WHEN 0 THEN @now
  467.                     ELSE LockDate
  468.                     END,
  469.                 @lockDate = LockDateLocal = CASE Locked
  470.                     WHEN 0 THEN @nowLocal
  471.                     ELSE LockDateLocal
  472.                     END,
  473.                 @lockCookie = LockCookie = CASE Locked
  474.                     WHEN 0 THEN LockCookie + 1
  475.                     ELSE LockCookie
  476.                     END,
  477.                 @itemShort = CASE Locked
  478.                     WHEN 0 THEN SessionItemShort
  479.                     ELSE NULL
  480.                     END,
  481.                 @textptr = CASE Locked
  482.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  483.                     ELSE NULL
  484.                     END,
  485.                 @length = CASE Locked
  486.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  487.                     ELSE NULL
  488.                     END,
  489.                 @locked = Locked,
  490.                 Locked = 1
  491.             WHERE SessionId = @id
  492.             IF @length IS NOT NULL BEGIN
  493.                 READTEXT ASPState..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  494.             END
  495.  
  496.             RETURN 0'
  497. ELSE
  498.     SET @cmd = '
  499.         CREATE PROCEDURE TempGetStateItemExclusive
  500.             @id         tSessionId,
  501.             @itemShort  tSessionItemShort OUTPUT,
  502.             @locked     BIT OUTPUT,
  503.             @lockDate   DATETIME OUTPUT,
  504.             @lockCookie INT OUTPUT
  505.         AS
  506.             DECLARE @textptr AS tTextPtr
  507.             DECLARE @length AS INT
  508.             DECLARE @now as DATETIME
  509.  
  510.             SET @now = GETDATE()
  511.             UPDATE ASPState..ASPStateTempSessions
  512.             SET Expires = DATEADD(n, Timeout, @now), 
  513.                 @lockDate = LockDate = CASE Locked
  514.                     WHEN 0 THEN @now
  515.                     ELSE LockDate
  516.                     END,
  517.                 @lockCookie = LockCookie = CASE Locked
  518.                     WHEN 0 THEN LockCookie + 1
  519.                     ELSE LockCookie
  520.                     END,
  521.                 @itemShort = CASE Locked
  522.                     WHEN 0 THEN SessionItemShort
  523.                     ELSE NULL
  524.                     END,
  525.                 @textptr = CASE Locked
  526.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  527.                     ELSE NULL
  528.                     END,
  529.                 @length = CASE Locked
  530.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  531.                     ELSE NULL
  532.                     END,
  533.                 @locked = Locked,
  534.                 Locked = 1
  535.             WHERE SessionId = @id
  536.             IF @length IS NOT NULL BEGIN
  537.                 READTEXT ASPState..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  538.             END
  539.  
  540.             RETURN 0'    
  541.  
  542. EXEC (@cmd)    
  543. GO
  544.  
  545.  
  546. DECLARE @ver INT
  547. EXEC GetMajorVersion @@ver=@ver OUTPUT
  548. DECLARE @cmd CHAR(8000)
  549. IF (@ver >= 8)
  550.     SET @cmd = '
  551.         CREATE PROCEDURE TempGetStateItemExclusive2
  552.             @id         tSessionId,
  553.             @itemShort  tSessionItemShort OUTPUT,
  554.             @locked     BIT OUTPUT,
  555.             @lockAge    INT OUTPUT,
  556.             @lockCookie INT OUTPUT
  557.         AS
  558.             DECLARE @textptr AS tTextPtr
  559.             DECLARE @length AS INT
  560.             DECLARE @now as DATETIME
  561.             DECLARE @nowLocal as DATETIME
  562.  
  563.             SET @now = GETUTCDATE()
  564.             SET @nowLocal = GETDATE()
  565.             
  566.             UPDATE ASPState..ASPStateTempSessions
  567.             SET Expires = DATEADD(n, Timeout, @now), 
  568.                 LockDate = CASE Locked
  569.                     WHEN 0 THEN @now
  570.                     ELSE LockDate
  571.                     END,
  572.                 LockDateLocal = CASE Locked
  573.                     WHEN 0 THEN @nowLocal
  574.                     ELSE LockDateLocal
  575.                     END,
  576.                 @lockAge = CASE Locked
  577.                     WHEN 0 THEN 0
  578.                     ELSE DATEDIFF(second, LockDate, @now)
  579.                     END,
  580.                 @lockCookie = LockCookie = CASE Locked
  581.                     WHEN 0 THEN LockCookie + 1
  582.                     ELSE LockCookie
  583.                     END,
  584.                 @itemShort = CASE Locked
  585.                     WHEN 0 THEN SessionItemShort
  586.                     ELSE NULL
  587.                     END,
  588.                 @textptr = CASE Locked
  589.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  590.                     ELSE NULL
  591.                     END,
  592.                 @length = CASE Locked
  593.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  594.                     ELSE NULL
  595.                     END,
  596.                 @locked = Locked,
  597.                 Locked = 1
  598.             WHERE SessionId = @id
  599.             IF @length IS NOT NULL BEGIN
  600.                 READTEXT ASPState..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  601.             END
  602.  
  603.             RETURN 0'
  604.  
  605. EXEC (@cmd)    
  606. GO
  607.  
  608.  
  609. DECLARE @ver INT
  610. EXEC GetMajorVersion @@ver=@ver OUTPUT
  611. DECLARE @cmd CHAR(8000)
  612. IF (@ver >= 8)
  613.     SET @cmd = '
  614.         CREATE PROCEDURE TempReleaseStateItemExclusive
  615.             @id         tSessionId,
  616.             @lockCookie INT
  617.         AS
  618.             UPDATE ASPState..ASPStateTempSessions
  619.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  620.                 Locked = 0
  621.             WHERE SessionId = @id AND LockCookie = @lockCookie
  622.  
  623.             RETURN 0'
  624. ELSE
  625.     SET @cmd = '
  626.         CREATE PROCEDURE TempReleaseStateItemExclusive
  627.             @id         tSessionId,
  628.             @lockCookie INT
  629.         AS
  630.             UPDATE ASPState..ASPStateTempSessions
  631.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  632.                 Locked = 0
  633.             WHERE SessionId = @id AND LockCookie = @lockCookie
  634.  
  635.             RETURN 0'
  636.  
  637. EXEC (@cmd)    
  638. GO
  639.  
  640.  
  641. DECLARE @ver INT
  642. EXEC GetMajorVersion @@ver=@ver OUTPUT
  643. DECLARE @cmd CHAR(8000)
  644. IF (@ver >= 8)
  645.     SET @cmd = '
  646.         CREATE PROCEDURE TempInsertStateItemShort
  647.             @id         tSessionId,
  648.             @itemShort  tSessionItemShort,
  649.             @timeout    INT
  650.         AS    
  651.  
  652.             DECLARE @now as DATETIME
  653.             DECLARE @nowLocal as DATETIME
  654.             
  655.             SET @now = GETUTCDATE()
  656.             SET @nowLocal = GETDATE()
  657.  
  658.             INSERT ASPState..ASPStateTempSessions 
  659.                 (SessionId, 
  660.                  SessionItemShort, 
  661.                  Timeout, 
  662.                  Expires, 
  663.                  Locked, 
  664.                  LockDate,
  665.                  LockDateLocal,
  666.                  LockCookie) 
  667.             VALUES 
  668.                 (@id, 
  669.                  @itemShort, 
  670.                  @timeout, 
  671.                  DATEADD(n, @timeout, @now), 
  672.                  0, 
  673.                  @now,
  674.                  @nowLocal,
  675.                  1)
  676.  
  677.             RETURN 0'
  678. ELSE
  679.     SET @cmd = '
  680.         CREATE PROCEDURE TempInsertStateItemShort
  681.             @id         tSessionId,
  682.             @itemShort  tSessionItemShort,
  683.             @timeout    INT
  684.         AS    
  685.  
  686.             DECLARE @now as DATETIME
  687.             SET @now = GETDATE()
  688.  
  689.             INSERT ASPState..ASPStateTempSessions 
  690.                 (SessionId, 
  691.                  SessionItemShort, 
  692.                  Timeout, 
  693.                  Expires, 
  694.                  Locked, 
  695.                  LockDate,
  696.                  LockCookie) 
  697.             VALUES 
  698.                 (@id, 
  699.                  @itemShort, 
  700.                  @timeout, 
  701.                  DATEADD(n, @timeout, @now), 
  702.                  0, 
  703.                  @now,
  704.                  1)
  705.  
  706.             RETURN 0'
  707.  
  708. EXEC (@cmd)    
  709. GO
  710.  
  711.  
  712. DECLARE @ver INT
  713. EXEC GetMajorVersion @@ver=@ver OUTPUT
  714. DECLARE @cmd CHAR(8000)
  715. IF (@ver >= 8)
  716.     SET @cmd = '
  717.         CREATE PROCEDURE TempInsertStateItemLong
  718.             @id         tSessionId,
  719.             @itemLong   tSessionItemLong,
  720.             @timeout    INT
  721.         AS    
  722.             DECLARE @now as DATETIME
  723.             DECLARE @nowLocal as DATETIME
  724.             
  725.             SET @now = GETUTCDATE()
  726.             SET @nowLocal = GETDATE()
  727.  
  728.             INSERT ASPState..ASPStateTempSessions 
  729.                 (SessionId, 
  730.                  SessionItemLong, 
  731.                  Timeout, 
  732.                  Expires, 
  733.                  Locked, 
  734.                  LockDate,
  735.                  LockDateLocal,
  736.                  LockCookie) 
  737.             VALUES 
  738.                 (@id, 
  739.                  @itemLong, 
  740.                  @timeout, 
  741.                  DATEADD(n, @timeout, @now), 
  742.                  0, 
  743.                  @now,
  744.                  @nowLocal,
  745.                  1)
  746.  
  747.             RETURN 0'
  748. ELSE
  749.     SET @cmd = '
  750.         CREATE PROCEDURE TempInsertStateItemLong
  751.             @id         tSessionId,
  752.             @itemLong   tSessionItemLong,
  753.             @timeout    INT
  754.         AS    
  755.             DECLARE @now as DATETIME
  756.             SET @now = GETDATE()
  757.  
  758.             INSERT ASPState..ASPStateTempSessions 
  759.                 (SessionId, 
  760.                  SessionItemLong, 
  761.                  Timeout, 
  762.                  Expires, 
  763.                  Locked, 
  764.                  LockDate,
  765.                  LockCookie) 
  766.             VALUES 
  767.                 (@id, 
  768.                  @itemLong, 
  769.                  @timeout, 
  770.                  DATEADD(n, @timeout, @now), 
  771.                  0, 
  772.                  @now,
  773.                  1)
  774.  
  775.             RETURN 0'
  776.  
  777. EXEC (@cmd)    
  778. GO
  779.  
  780.  
  781. DECLARE @ver INT
  782. EXEC GetMajorVersion @@ver=@ver OUTPUT
  783. DECLARE @cmd CHAR(8000)
  784. IF (@ver >= 8)
  785.     SET @cmd = '
  786.         CREATE PROCEDURE TempUpdateStateItemShort
  787.             @id         tSessionId,
  788.             @itemShort  tSessionItemShort,
  789.             @timeout    INT,
  790.             @lockCookie INT
  791.         AS    
  792.             UPDATE ASPState..ASPStateTempSessions
  793.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  794.                 SessionItemShort = @itemShort, 
  795.                 Timeout = @timeout,
  796.                 Locked = 0
  797.             WHERE SessionId = @id AND LockCookie = @lockCookie
  798.  
  799.             RETURN 0'
  800. ELSE
  801.     SET @cmd = '
  802.         CREATE PROCEDURE TempUpdateStateItemShort
  803.             @id         tSessionId,
  804.             @itemShort  tSessionItemShort,
  805.             @timeout    INT,
  806.             @lockCookie INT
  807.         AS    
  808.             UPDATE ASPState..ASPStateTempSessions
  809.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  810.                 SessionItemShort = @itemShort, 
  811.                 Timeout = @timeout,
  812.                 Locked = 0
  813.             WHERE SessionId = @id AND LockCookie = @lockCookie
  814.  
  815.             RETURN 0'
  816.  
  817. EXEC (@cmd)    
  818. GO
  819.  
  820.  
  821. DECLARE @ver INT
  822. EXEC GetMajorVersion @@ver=@ver OUTPUT
  823. DECLARE @cmd CHAR(8000)
  824. IF (@ver >= 8)
  825.     SET @cmd = '
  826.         CREATE PROCEDURE TempUpdateStateItemShortNullLong
  827.             @id         tSessionId,
  828.             @itemShort  tSessionItemShort,
  829.             @timeout    INT,
  830.             @lockCookie INT
  831.         AS    
  832.             UPDATE ASPState..ASPStateTempSessions
  833.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  834.                 SessionItemShort = @itemShort, 
  835.                 SessionItemLong = NULL, 
  836.                 Timeout = @timeout,
  837.                 Locked = 0
  838.             WHERE SessionId = @id AND LockCookie = @lockCookie
  839.  
  840.             RETURN 0'
  841. ELSE
  842.     SET @cmd = '
  843.         CREATE PROCEDURE TempUpdateStateItemShortNullLong
  844.             @id         tSessionId,
  845.             @itemShort  tSessionItemShort,
  846.             @timeout    INT,
  847.             @lockCookie INT
  848.         AS    
  849.             UPDATE ASPState..ASPStateTempSessions
  850.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  851.                 SessionItemShort = @itemShort, 
  852.                 SessionItemLong = NULL, 
  853.                 Timeout = @timeout,
  854.                 Locked = 0
  855.             WHERE SessionId = @id AND LockCookie = @lockCookie
  856.  
  857.             RETURN 0'
  858.  
  859. EXEC (@cmd)    
  860. GO
  861.  
  862.  
  863. DECLARE @ver INT
  864. EXEC GetMajorVersion @@ver=@ver OUTPUT
  865. DECLARE @cmd CHAR(8000)
  866. IF (@ver >= 8)
  867.     SET @cmd = '
  868.         CREATE PROCEDURE TempUpdateStateItemLong
  869.             @id         tSessionId,
  870.             @itemLong   tSessionItemLong,
  871.             @timeout    INT,
  872.             @lockCookie INT
  873.         AS    
  874.             UPDATE ASPState..ASPStateTempSessions
  875.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  876.                 SessionItemLong = @itemLong,
  877.                 Timeout = @timeout,
  878.                 Locked = 0
  879.             WHERE SessionId = @id AND LockCookie = @lockCookie
  880.  
  881.             RETURN 0'
  882. ELSE
  883.     SET @cmd = '
  884.         CREATE PROCEDURE TempUpdateStateItemLong
  885.             @id         tSessionId,
  886.             @itemLong   tSessionItemLong,
  887.             @timeout    INT,
  888.             @lockCookie INT
  889.         AS    
  890.             UPDATE ASPState..ASPStateTempSessions
  891.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  892.                 SessionItemLong = @itemLong,
  893.                 Timeout = @timeout,
  894.                 Locked = 0
  895.             WHERE SessionId = @id AND LockCookie = @lockCookie
  896.  
  897.             RETURN 0'
  898.  
  899. EXEC (@cmd)            
  900. GO
  901.  
  902.  
  903. DECLARE @ver INT
  904. EXEC GetMajorVersion @@ver=@ver OUTPUT
  905. DECLARE @cmd CHAR(8000)
  906. IF (@ver >= 8)
  907.     SET @cmd = '
  908.         CREATE PROCEDURE TempUpdateStateItemLongNullShort
  909.             @id         tSessionId,
  910.             @itemLong   tSessionItemLong,
  911.             @timeout    INT,
  912.             @lockCookie INT
  913.         AS    
  914.             UPDATE ASPState..ASPStateTempSessions
  915.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  916.                 SessionItemLong = @itemLong, 
  917.                 SessionItemShort = NULL,
  918.                 Timeout = @timeout,
  919.                 Locked = 0
  920.             WHERE SessionId = @id AND LockCookie = @lockCookie
  921.  
  922.             RETURN 0'
  923. ELSE
  924.     SET @cmd = '
  925.     CREATE PROCEDURE TempUpdateStateItemLongNullShort
  926.         @id         tSessionId,
  927.         @itemLong   tSessionItemLong,
  928.         @timeout    INT,
  929.         @lockCookie INT
  930.     AS    
  931.         UPDATE ASPState..ASPStateTempSessions
  932.         SET Expires = DATEADD(n, Timeout, GETDATE()), 
  933.             SessionItemLong = @itemLong, 
  934.             SessionItemShort = NULL,
  935.             Timeout = @timeout,
  936.             Locked = 0
  937.         WHERE SessionId = @id AND LockCookie = @lockCookie
  938.  
  939.         RETURN 0'
  940.  
  941. EXEC (@cmd)            
  942. GO
  943.  
  944. CREATE PROCEDURE TempRemoveStateItem
  945.     @id     tSessionId,
  946.     @lockCookie INT
  947. AS
  948.     DELETE ASPState..ASPStateTempSessions
  949.     WHERE SessionId = @id AND LockCookie = @lockCookie
  950.     RETURN 0
  951. GO
  952.             
  953. DECLARE @ver INT
  954. EXEC GetMajorVersion @@ver=@ver OUTPUT
  955. DECLARE @cmd CHAR(8000)
  956. IF (@ver >= 8)
  957.     SET @cmd = '
  958.         CREATE PROCEDURE TempResetTimeout
  959.             @id     tSessionId
  960.         AS
  961.             UPDATE ASPState..ASPStateTempSessions
  962.             SET Expires = DATEADD(n, Timeout, GETUTCDATE())
  963.             WHERE SessionId = @id
  964.             RETURN 0'
  965. ELSE
  966.     SET @cmd = '
  967.         CREATE PROCEDURE TempResetTimeout
  968.             @id     tSessionId
  969.         AS
  970.             UPDATE ASPState..ASPStateTempSessions
  971.             SET Expires = DATEADD(n, Timeout, GETDATE())
  972.             WHERE SessionId = @id
  973.             RETURN 0'
  974.  
  975. EXEC (@cmd)            
  976. GO
  977.  
  978.             
  979. DECLARE @ver INT
  980. EXEC GetMajorVersion @@ver=@ver OUTPUT
  981. DECLARE @cmd CHAR(8000)
  982. IF (@ver >= 8)
  983.     SET @cmd = '
  984.         CREATE PROCEDURE DeleteExpiredSessions
  985.         AS
  986.             DECLARE @now DATETIME
  987.             SET @now = GETUTCDATE()
  988.  
  989.             DELETE ASPState..ASPStateTempSessions
  990.             WHERE Expires < @now
  991.  
  992.             RETURN 0'
  993. ELSE
  994.     SET @cmd = '
  995.         CREATE PROCEDURE DeleteExpiredSessions
  996.         AS
  997.             DECLARE @now DATETIME
  998.             SET @now = GETDATE()
  999.  
  1000.             DELETE ASPState..ASPStateTempSessions
  1001.             WHERE Expires < @now
  1002.  
  1003.             RETURN 0'
  1004.  
  1005. EXEC (@cmd)            
  1006. GO
  1007.             
  1008. EXECUTE CreateTempTables
  1009. GO
  1010.  
  1011. /* Create the startup procedure */
  1012. USE master
  1013. GO
  1014.  
  1015. /* Create the job to delete expired sessions */
  1016. BEGIN TRANSACTION            
  1017.     DECLARE @JobID BINARY(16)  
  1018.     DECLARE @ReturnCode INT    
  1019.     SELECT @ReturnCode = 0     
  1020.  
  1021.     -- Add job category
  1022.     IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1 
  1023.         EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'
  1024.  
  1025.     -- Add the job
  1026.     EXECUTE @ReturnCode = msdb.dbo.sp_add_job 
  1027.             @job_id = @JobID OUTPUT, 
  1028.             @job_name = N'ASPState_Job_DeleteExpiredSessions', 
  1029.             @owner_login_name = NULL, 
  1030.             @description = N'Deletes expired sessions from the session state database.', 
  1031.             @category_name = N'[Uncategorized (Local)]', 
  1032.             @enabled = 1, 
  1033.             @notify_level_email = 0, 
  1034.             @notify_level_page = 0, 
  1035.             @notify_level_netsend = 0, 
  1036.             @notify_level_eventlog = 0, 
  1037.             @delete_level= 0
  1038.  
  1039.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1040.     
  1041.     -- Add the job steps
  1042.     EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep 
  1043.             @job_id = @JobID,
  1044.             @step_id = 1, 
  1045.             @step_name = N'ASPState_JobStep_DeleteExpiredSessions', 
  1046.             @command = N'EXECUTE DeleteExpiredSessions', 
  1047.             @database_name = N'ASPState', 
  1048.             @server = N'', 
  1049.             @database_user_name = N'', 
  1050.             @subsystem = N'TSQL', 
  1051.             @cmdexec_success_code = 0, 
  1052.             @flags = 0, 
  1053.             @retry_attempts = 0, 
  1054.             @retry_interval = 1, 
  1055.             @output_file_name = N'', 
  1056.             @on_success_step_id = 0, 
  1057.             @on_success_action = 1, 
  1058.             @on_fail_step_id = 0, 
  1059.             @on_fail_action = 2
  1060.  
  1061.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1062.  
  1063.     EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1 
  1064.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1065.     
  1066.     -- Add the job schedules
  1067.     EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule 
  1068.             @job_id = @JobID, 
  1069.             @name = N'ASPState_JobSchedule_DeleteExpiredSessions', 
  1070.             @enabled = 1, 
  1071.             @freq_type = 4,     
  1072.             @active_start_date = 20001016, 
  1073.             @active_start_time = 0, 
  1074.             @freq_interval = 1, 
  1075.             @freq_subday_type = 4, 
  1076.             @freq_subday_interval = 1, 
  1077.             @freq_relative_interval = 0, 
  1078.             @freq_recurrence_factor = 0, 
  1079.             @active_end_date = 99991231, 
  1080.             @active_end_time = 235959
  1081.  
  1082.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1083.     
  1084.     -- Add the Target Servers
  1085.     EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)' 
  1086.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1087.     
  1088.     COMMIT TRANSACTION          
  1089.     GOTO   EndSave              
  1090. QuitWithRollback:
  1091.     IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION 
  1092. EndSave: 
  1093. GO
  1094.  
  1095.